iT邦幫忙

2022 iThome 鐵人賽

DAY 13
0

DOM

DOM(Document Object Model,文件物件模型)是 HTML、XML 和 SVG 文件的程式介面,它的功能是提供了一個 API 來訪問、讀取或改變頁面的內容。節點上可以加上物件處理的程序,一旦觸發事件就會執行處理程序,DOM常常會被javascript拿來使用,但是他並不屬於javascript的一員,雖然不常見,但他也可以被其他語言使用。

虛擬DOM

虛擬DOM的存在就是為了避免直接操作DOM,因為直接操作DOM往往很費時費力,所以虛擬DOM在react上是很受歡迎的,因為人們可以透過react進而去操作虛擬DOM,

Virtual DOM 實際上的作法就是用物件來描述 DOM 的結構,在 DOM 的節點需要更動時,不直接修改 DOM,而是透過 diff 演算法比較 Virtual DOM 修改前與修改後的樹狀結構,然後批次更新真實 DOM 中的節點。

了解完了DOM後,我們來看看什麼是React-DOM?
如果想要全局使用React-DOM的API功能,可以使用來加載 ,但各個版本使用ReactDOM的方始也不太一樣,
使用ES6 與npm :import ReactDOM from 'react-dom'
使用ES5 與npm :var ReactDOM = require('react-dom')
接下來將介紹最常使用到的render()語法
ReactDOM.render(componentToRender, targetNode)
第一個參數是你想要渲染的 React 組件。第二個參數是要在其中呈現該組件的 DOM 節點

const react = (
  
  <div>
    <h1>Hello World</h1>
    <p>let's try some DOM</p>
  </div>
);
ReactDOM.render(react, document.getElementById("challenge-node"));

在網頁上呈現的就會是這樣
https://ithelp.ithome.com.tw/upload/images/20220924/20152220PoHeY5OwbR.png
ReactDOM.render()必須在元素宣告完之後才能調用,就像在使用變量之前必須宣告變量一樣

接下來我們來看看在React內使用DOM的例子吧

將 class component render到 DOM方法

class TypesOfFood extends React.Component {
  constructor(props) {
    super(props);
  }
  render() {
    return (
      <div>
        <h1>Types of Food:</h1>
        <Fruits />
        <Vegetables />
      </div>
    );
  }
};
ReactDOM.render(<TypesOfFood />, document.getElementById('challenge-node'))

Fruits和組件都是Vegetables已經被定義的,我們要做的事是把TypesOfFood渲染到 DOM

https://ithelp.ithome.com.tw/upload/images/20220924/2015222076Xu1ZclvA.png
這是輸出結果

參考文章:
https://medium.com/%E6%89%8B%E5%AF%AB%E7%AD%86%E8%A8%98/build-a-simple-virtual-dom-5cf12ccf379f
https://developer.mozilla.org/zh-TW/docs/Web/API/Document_Object_Model
https://www.freecodecamp.org/learn/front-end-development-libraries/react/render-a-class-component-to-the-dom


上一篇
[DAY12]React ES6介紹
下一篇
[DAY14]React 中的表單
系列文
進階前端網頁設計-初心者的30天React學習及應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言